﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfService
{
    //**************************************************
    // Tandvårdsstöd - Projektet
    // Författare: Safin Hassan, Jan Gundersen, Ali Agha
    // Datum: 2012-03-25
    //**************************************************

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    public class Service1 : IService1
    {
        #region Variabler och Metoder definerade av Safin Hassan
        
        private System.Data.DataSet dataSetValue = new System.Data.DataSet();
        private DataSetTableAdapters.PersonerTableAdapter personerTable = new DataSetTableAdapters.PersonerTableAdapter();
        private DataSetTableAdapters.KlinikTableAdapter klinikTable = new DataSetTableAdapters.KlinikTableAdapter();
        private DataSetTableAdapters.PersonuppgifterTableAdapter PersonuppgifterTable = new DataSetTableAdapters.PersonuppgifterTableAdapter();

        /// <summary>
        /// Returnerar DataSet innehållande aktuell ledig Kortnummer för personerTable.
        /// </summary>
        /// <returns>DataSet innehållande atomär ledig Kortnummer</returns>
        public System.Data.DataSet GetScalarQueryMaxKortnummer()
        {
            int returnValue;
            returnValue = (int)personerTable.ScalarQueryMaxKortnummer();

            dataSetValue.Tables.Add(returnValue.ToString());
            return dataSetValue;
        }

        /// <summary>
        /// Returnerar DataSet innehållande post som matchar sök termen i personuppgifterTable.
        /// </summary>
        /// <param name="searchValue">Sträng av sök ordet.</param>
        /// <returns>DataSet innehållande sök resultatet.</returns>
        public System.Data.DataSet GetDataByPersonnummer(string @searchValue)
        {
            dataSetValue.Tables.Add(PersonuppgifterTable.GetDataByPersonnummer(@searchValue));
            return dataSetValue;
        }

        /// <summary>
        /// Returnerar DataSet innehållande post som matchar sök termen i personTable.
        /// </summary>
        /// <param name="personnummer">Sträng av sök ordet.</param>
        /// <returns>DataSet innehållande sök resultatet.</returns>
        public System.Data.DataSet GetDataByKortnummer(string @personnummer)
        {
            dataSetValue.Tables.Add(personerTable.GetDataByKortnummer(@personnummer));
            return dataSetValue;
        }

        /// <summary>
        /// Returnerar DataSet innehållande data från förhandsbedömnings tabellen.
        /// </summary>
        /// <returns>DataSet innehållande data från förhandsbedömnings tabellen</returns>
        public System.Data.DataSet GetDataForhandsbedomningar()
        {
            dataSetValue.Tables.Add(förhandsbedömningTable.GetData());
            return dataSetValue;
        }

        /// <summary>
        /// Uppdaterar personerTable om det går igenom
        /// </summary>
        /// <param name="26 st"></param>
        /// <returns>false eller true</returns>
        public bool UpdatePersoner(int Kortnummer, string Personnummer, string Förnamn, string Efternamn, string gatuadress, string postnummer, string ort,
    short Grupp, int Kontaktperson, bool Intyg_utsänt, string Kommentar, int p1, bool Avliden, bool Dubbelt_rapporterat, bool Intyg_beställt,
    string Boende, string Accepterat_munhälsobedömning, bool Dublettkort_utfärdat, DateTime Datum_för_senaste_dublettkort, string Antal_dublettkort,
    DateTime Inregistreringsdatum, DateTime Reviderat_tandvårdsintyg, bool Avförd_pga_ändrad_eller_felaktig_bedömning, string Aktuellt_anbudsområde, string Anbudsområde_före_2006, int Orginal_Id)
        {
            try
            {
                personerTable.Update(Kortnummer, Personnummer, Förnamn, Efternamn, gatuadress, postnummer, ort, Grupp, Kontaktperson,
                    Intyg_utsänt, Kommentar, p1, Avliden, Dubbelt_rapporterat, Intyg_beställt, Boende, Accepterat_munhälsobedömning,
                    Dublettkort_utfärdat, Datum_för_senaste_dublettkort, Antal_dublettkort, Inregistreringsdatum, Reviderat_tandvårdsintyg,
                    Avförd_pga_ändrad_eller_felaktig_bedömning, Aktuellt_anbudsområde, Anbudsområde_före_2006, Orginal_Id);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// Lägger till ny person i personerTable om det går igenom
        /// </summary>
        /// <param name="25 st"></param>
        /// <returns>false eller true</returns>
        public bool InsertIntoPersoner(int Kortnummer, string Personnummer, string Förnamn, string Efternamn, string gatuadress, string postnummer, string ort,
            short Grupp , int Kontaktperson, bool Intyg_utsänt, string Kommentar, int p1, bool Avliden, bool Dubbelt_rapporterat, bool Intyg_beställt,
            string Boende, string Accepterat_munhälsobedömning, bool Dublettkort_utfärdat, DateTime Datum_för_senaste_dublettkort, string Antal_dublettkort,
            DateTime Inregistreringsdatum, DateTime Reviderat_tandvårdsintyg, bool Avförd_pga_ändrad_eller_felaktig_bedömning, string Aktuellt_anbudsområde, string Anbudsområde_före_2006)
        {
            try
            {
               personerTable.Insert(Kortnummer, Personnummer, Förnamn, Efternamn, gatuadress, postnummer, ort, Grupp, Kontaktperson,
                   Intyg_utsänt, Kommentar,p1, Avliden, Dubbelt_rapporterat, Intyg_beställt, Boende, Accepterat_munhälsobedömning,
                   Dublettkort_utfärdat, Datum_för_senaste_dublettkort, Antal_dublettkort, Inregistreringsdatum, Reviderat_tandvårdsintyg,
                   Avförd_pga_ändrad_eller_felaktig_bedömning, Aktuellt_anbudsområde, Anbudsområde_före_2006);
                return true;
            }
            catch
            {
                return false;
            }
        }



        #endregion


        #region Variabler och Metoder definerade av Jan Gundersen


        private DataSetTableAdapters.FörhandsbedömningTableAdapter LaggTillFörhandsbedömningTable = new DataSetTableAdapters.FörhandsbedömningTableAdapter();
        private DataSetTableAdapters.BehandlareTableAdapter behandlareTable = new DataSetTableAdapters.BehandlareTableAdapter();
        private DataSetTableAdapters.BedömningstandläkareTableAdapter bedömningstandläkareTable = new DataSetTableAdapters.BedömningstandläkareTableAdapter();
        private DataSetTableAdapters.KlinikTableAdapter klinikNamntable = new DataSetTableAdapters.KlinikTableAdapter();
        private DataSetTableAdapters.Personer_förhandsbedömningTableAdapter PersonerFörhandsbedmnTable = new DataSetTableAdapters.Personer_förhandsbedömningTableAdapter();

        public System.Data.DataSet GetDataByPersonnrFörhandsbedömning(string @searchValue)
        {
            dataSetValue.Tables.Add(PersonerFörhandsbedmnTable.GetDataByPersonnrFörhandsbedömning(@searchValue));
            return dataSetValue;
        }

        public System.Data.DataSet GetDataBehandlare()
        {
            dataSetValue.Tables.Add(behandlareTable.GetData());
            return dataSetValue;
        }

        public System.Data.DataSet GetDataBedömningstandläkare()
        {
            dataSetValue.Tables.Add(bedömningstandläkareTable.GetData());
            return dataSetValue;
        }

        public System.Data.DataSet GetDataKlinikNamnBedm()
        {
            dataSetValue.Tables.Add(klinikNamntable.GetDataKlinikNamn());
            return dataSetValue;
        }

        /// <summary>
        /// Returnerar DataSet innehållande aktuell ledig löpnummer för förhandsbedömningsTable.
        /// </summary>
        /// <returns>DataSet innehållande atomär ledig löpnummer</returns>
        public System.Data.DataSet ScalarQueryMaxlöpnummer()
        {
            string returnValue;
            returnValue = förhandsbedömningTable.ScalarMaxLöpnummer().ToString();

            dataSetValue.Tables.Add(returnValue);
            return dataSetValue;
        }

        public bool InsertIntoFörhandsbedömningar(string löpnummer, DateTime ankomstdatum, string personnr, string behandlarkod, string bedömningstandläkare, DateTime sändTillBTL,
            DateTime ÅterFrånBTL, DateTime beslutsdatum, string beslutAv, DateTime återTillTandlkr, bool nödvändigTandv, bool protetik, bool MerÄn4000, bool ledAvSjukdom,
            int grupp, decimal beräknKostnad, bool godkänd, bool godkändmedförändr, bool ejGodkänd, bool makulerad, string klinik, string kommentar, bool tandvårdsIntygFinns,
            bool särskildÅtgärd)
        {
            try
            {
                förhandsbedömningTable.Insert(löpnummer, ankomstdatum, personnr, behandlarkod, bedömningstandläkare, sändTillBTL, ÅterFrånBTL,
                    beslutsdatum, beslutAv, återTillTandlkr, nödvändigTandv, protetik, MerÄn4000, ledAvSjukdom, grupp, beräknKostnad, godkänd,
                    godkändmedförändr, ejGodkänd, makulerad, klinik, kommentar, tandvårdsIntygFinns, särskildÅtgärd);
                return true;
            }
            catch
            {
                return false;
            }
        }


        public System.Data.DataSet GetDataRäkningByPersonnummer(string @Personnummer)
        {
            dataSetValue.Tables.Add(räkningTable.GetDataByRakningPersonnummer(@Personnummer));
            return dataSetValue;
        }

        public System.Data.DataSet GetDataRäkningByBehandlarkod(string @Behkod)
        {
            dataSetValue.Tables.Add(räkningTable.GetDataByRakningBehandlarkod(@Behkod));
            return dataSetValue;
        }

        #endregion


        #region Variabler och Metoder definerade av Ali Agha

        /// <summary>
        /// Instansieringar av mina tabeller som finns i datasetet.
        /// </summary>
        private DataSetTableAdapters.FörhandsbedömningTableAdapter förhandsbedömningTable = new DataSetTableAdapters.FörhandsbedömningTableAdapter();
        private DataSetTableAdapters.SalivprovTableAdapter salivprovTable = new DataSetTableAdapters.SalivprovTableAdapter();
        private DataSetTableAdapters.TandvårdsräkningTableAdapter räkningTable = new DataSetTableAdapters.TandvårdsräkningTableAdapter();
        private DataSetTableAdapters.Personer_tandvårdsräkningTableAdapter personerRäkningTable = new DataSetTableAdapters.Personer_tandvårdsräkningTableAdapter();


        /// <summary>
        /// En metod som hämtar ut information om alla registrerade personer som finns i systemet.
        /// </summary>
        /// <returns></returns>
        public System.Data.DataSet GetDataPerson()
        {
            dataSetValue.Tables.Add(personerTable.GetData());
            return dataSetValue;
        }

        /// <summary>
        /// En metod som uppdaterar förhandsbedömningstabellen.
        /// </summary>
        /// <param name="löpnummer"></param>
        /// <param name="ankomstDatum"></param>
        /// <param name="personnummer"></param>
        /// <param name="behandlarKod"></param>
        /// <param name="bedömningstandläkare"></param>
        /// <param name="sändTillBTL"></param>
        /// <param name="återFrånBTL"></param>
        /// <param name="beslutsDatum"></param>
        /// <param name="beslutAv"></param>
        /// <param name="återTillTandläkare"></param>
        /// <param name="nödvändigTandvård"></param>
        /// <param name="protetik"></param>
        /// <param name="merÄn4000"></param>
        /// <param name="ledISjukbehandling"></param>
        /// <param name="grupp"></param>
        /// <param name="beräknadKostnad"></param>
        /// <param name="godkänd"></param>
        /// <param name="godkändMedFörändring"></param>
        /// <param name="ejGodkänd"></param>
        /// <param name="makulerad"></param>
        /// <param name="klinik"></param>
        /// <param name="kommentar"></param>
        /// <param name="tandvårdsintygFinns"></param>
        /// <param name="särskildÅtgärd"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public bool UpdateFörhandsbedömning(string löpnummer, DateTime ankomstDatum, string personnummer, string behandlarKod, string bedömningstandläkare,
            DateTime sändTillBTL, DateTime återFrånBTL, DateTime beslutsDatum, string beslutAv, DateTime återTillTandläkare, Boolean nödvändigTandvård, Boolean protetik,
            Boolean merÄn4000, Boolean ledISjukbehandling, int grupp, decimal beräknadKostnad, Boolean godkänd, Boolean godkändMedFörändring, Boolean ejGodkänd, 
            Boolean makulerad, string klinik, string kommentar, Boolean tandvårdsintygFinns, Boolean särskildÅtgärd, int id)
        {
            try
            {
                förhandsbedömningTable.Update(löpnummer, ankomstDatum, personnummer, behandlarKod, bedömningstandläkare, sändTillBTL, återFrånBTL, beslutsDatum,
                    beslutAv, återTillTandläkare, nödvändigTandvård, protetik, merÄn4000, ledISjukbehandling, grupp, beräknadKostnad, godkänd, godkändMedFörändring,
                    ejGodkänd, makulerad, klinik, kommentar, tandvårdsintygFinns, särskildÅtgärd, id);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// En metod som hämtar ut all information om de registrerade förhandbedömningarna som finns i systemet.
        /// </summary>
        /// <returns></returns>
        public System.Data.DataSet GetDataFörhandsbedömning()
        {
            dataSetValue.Tables.Add(förhandsbedömningTable.GetData());
            return dataSetValue;
        }

        /// <summary>
        /// En metod som hämtar ut en förhandsbedömning beroende på det löpnummer som angetts.
        /// </summary>
        /// <param name="Löpnummer"></param>
        /// <returns></returns>
        public System.Data.DataSet GetDataByLöpnr(string @Löpnummer)
        {
            dataSetValue.Tables.Add(förhandsbedömningTable.GetDataByLöpnr(@Löpnummer));
            return dataSetValue;
        }

        /// <summary>
        /// En metod som hämtar ut en förhandsbedömning beroende på den behandlarkoden som anges, men även 
        /// behandlarnamnet.
        /// </summary>
        /// <param name="BehKodAndForNamn"></param>
        /// <returns></returns>
        public System.Data.DataSet GetDataByBehandlarkod(string @BehKodAndForNamn)
        {
            dataSetValue.Tables.Add(förhandsbedömningTable.GetDataByBehandlarkod(@BehKodAndForNamn));
            return dataSetValue;
        }

        /// <summary>
        /// En metod som hämtar ut en förhandsbedömning beroende på det personnummret som anges.
        /// </summary>
        /// <param name="Personnummer"></param>
        /// <returns></returns>
        public System.Data.DataSet GetDataByPatientPersonnummer(string @Personnummer)
        {
            dataSetValue.Tables.Add(förhandsbedömningTable.GetDataByPatientPersonnummer(@Personnummer));
            return dataSetValue;
        }

        /// <summary>
        ///  En metod som hämtar ut all information om de registrerade salivproven som finns i systemet.
        /// </summary>
        /// <returns></returns>
        public System.Data.DataSet GetDataSalivProv()
        {
            dataSetValue.Tables.Add(salivprovTable.GetDataBySalivprov()) ;
            return dataSetValue;
        }

        /// <summary>
        /// En metod som hämtar ut ett salivprov beroende på det personnummret som anges.
        /// </summary>
        /// <param name="Personnummer"></param>
        /// <returns></returns>
        public System.Data.DataSet GetDataSalivByPersonNr(string @Personnummer)
        {
            dataSetValue.Tables.Add(salivprovTable.GetDataByPersonNr(@Personnummer));
            return dataSetValue;
        }

        /// <summary>
        /// En metod som hämtar ut all information om de registrerade klinikerna som finns i systemet.
        /// </summary>
        /// <returns></returns>
        public System.Data.DataSet GetDataKlinikNamn()
        {
            dataSetValue.Tables.Add(klinikTable.GetDataKlinikNamn());
            return dataSetValue;
        }

        /// <summary>
        /// En metod som hämtar ut all information om de registrerade behandlarna som finns i systemet.
        /// </summary>
        /// <returns></returns>
        public System.Data.DataSet GetDataBehandlareLista()
        {
            dataSetValue.Tables.Add(behandlareTable.GetData());
            return dataSetValue;
        }

        /// <summary>
        /// En metod som hämtar ut all information om de registrerade räkningarna som finns i systemet.
        /// </summary>
        /// <returns></returns>
        public System.Data.DataSet GetDataRäkning()
        {
            dataSetValue.Tables.Add(räkningTable.GetData());
            return dataSetValue;
        }

        /// <summary>
        /// En metod som hämtar ut en räkning beroende på det personnummret eller löpnummret som anges.
        /// </summary>
        /// <param name="Searchvalue"></param>
        /// <returns></returns>
        public System.Data.DataSet GetDataRäkningByPersonNrAndLöpNr(string @Searchvalue)
        {
            dataSetValue.Tables.Add(räkningTable.GetDataByRakningPersNr(@Searchvalue));
            return dataSetValue;
        }

        /// <summary>
        /// En metod som uppdaterar räkningstabellen.
        /// </summary>
        /// <param name="personnummer"></param>
        /// <param name="förNamn"></param>
        /// <param name="efterNamn"></param>
        /// <param name="behandlarkod"></param>
        /// <param name="nödvändigVård"></param>
        /// <param name="TSLIES"></param>
        /// <param name="bruttoKostnad"></param>
        /// <param name="erlagdPatientavgift"></param>
        /// <param name="nettoKrav"></param>
        /// <param name="antalBesök"></param>
        /// <param name="betaldaBesök"></param>
        /// <param name="frikortsBesök"></param>
        /// <param name="uteblivande"></param>
        /// <param name="förhandsprövningGjord"></param>
        /// <param name="InkommandeDatum"></param>
        /// <param name="utanordnadDatum"></param>
        /// <param name="klinik"></param>
        /// <param name="förhandsbedömningLöpnr"></param>
        /// <param name="justeratKrav"></param>
        /// <param name="kommentar"></param>
        /// <param name="makulerad"></param>
        /// <param name="godkänd"></param>
        /// <param name="tandvårdsIntyg"></param>
        /// <param name="FHPFinns"></param>
        /// <param name="patientLista"></param>
        /// <param name="nuvarandegrupp"></param>
        /// <param name="FTVmånad"></param>
        /// <param name="vårdTOM"></param>
        /// <param name="typAvVård"></param>
        /// <param name="särskildÅtgärd"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public bool UpdateRäkning(string personnummer, string förNamn, string efterNamn, string behandlarkod,
            Boolean nödvändigVård, Boolean TSLIES, decimal bruttoKostnad, decimal erlagdPatientavgift, decimal nettoKrav,
            string antalBesök, string betaldaBesök, string frikortsBesök, string uteblivande, Boolean förhandsprövningGjord,
            DateTime InkommandeDatum, DateTime utanordnadDatum, string klinik, string förhandsbedömningLöpnr,
            decimal justeratKrav, string kommentar, Boolean makulerad, Boolean godkänd, Boolean tandvårdsIntyg,
            Boolean FHPFinns, Boolean patientLista, int nuvarandegrupp, DateTime FTVmånad, string vårdTOM, string typAvVård,
            Boolean särskildÅtgärd, int id)
        {
            try
            {
                räkningTable.Update(personnummer, förNamn, efterNamn, behandlarkod, nödvändigVård, TSLIES, bruttoKostnad,
                    erlagdPatientavgift, nettoKrav, antalBesök, betaldaBesök, frikortsBesök, uteblivande, förhandsprövningGjord,
                    InkommandeDatum, utanordnadDatum, klinik, förhandsbedömningLöpnr, justeratKrav, kommentar, makulerad,
                    godkänd, tandvårdsIntyg, FHPFinns, patientLista, nuvarandegrupp, FTVmånad, vårdTOM, typAvVård,
                    särskildÅtgärd, id);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// En metod som matar in ny information i räkningsTabellen med alla de tillhörande parametrarna.
        /// </summary>
        /// <param name="personnummer"></param>
        /// <param name="förNamn"></param>
        /// <param name="efterNamn"></param>
        /// <param name="behandlarkod"></param>
        /// <param name="nödvändigVård"></param>
        /// <param name="TSLIES"></param>
        /// <param name="bruttoKostnad"></param>
        /// <param name="erlagdPatientavgift"></param>
        /// <param name="nettoKrav"></param>
        /// <param name="antalBesök"></param>
        /// <param name="betaldaBesök"></param>
        /// <param name="frikortsBesök"></param>
        /// <param name="uteblivande"></param>
        /// <param name="förhandsprövningGjord"></param>
        /// <param name="InkommandeDatum"></param>
        /// <param name="utanordnadDatum"></param>
        /// <param name="klinik"></param>
        /// <param name="förhandsbedömningLöpnr"></param>
        /// <param name="justeratKrav"></param>
        /// <param name="kommentar"></param>
        /// <param name="makulerad"></param>
        /// <param name="godkänd"></param>
        /// <param name="tandvårdsIntyg"></param>
        /// <param name="FHPFinns"></param>
        /// <param name="patientLista"></param>
        /// <param name="nuvarandegrupp"></param>
        /// <param name="FTVmånad"></param>
        /// <param name="vårdTOM"></param>
        /// <param name="typAvVård"></param>
        /// <param name="särskildÅtgärd"></param>
        /// <returns></returns>
        public bool InsertIntoRäkning(string personnummer, string förNamn, string efterNamn, string behandlarkod,
            Boolean nödvändigVård, Boolean TSLIES, decimal bruttoKostnad, decimal erlagdPatientavgift, decimal nettoKrav,
            string antalBesök, string betaldaBesök, string frikortsBesök, string uteblivande, Boolean förhandsprövningGjord,
            DateTime InkommandeDatum, DateTime utanordnadDatum, string klinik, string förhandsbedömningLöpnr,
            decimal justeratKrav, string kommentar, Boolean makulerad, Boolean godkänd, Boolean tandvårdsIntyg,
            Boolean FHPFinns, Boolean patientLista, int nuvarandegrupp, DateTime FTVmånad, string vårdTOM, string typAvVård,
            Boolean särskildÅtgärd)
        {
            try
            {
                räkningTable.Insert(personnummer, förNamn, efterNamn, behandlarkod, nödvändigVård, TSLIES, bruttoKostnad,
                    erlagdPatientavgift, nettoKrav, antalBesök, betaldaBesök, frikortsBesök, uteblivande, förhandsprövningGjord,
                    InkommandeDatum, utanordnadDatum, klinik, förhandsbedömningLöpnr, justeratKrav, kommentar, makulerad,
                    godkänd, tandvårdsIntyg, FHPFinns, patientLista, nuvarandegrupp, FTVmånad, vårdTOM, typAvVård,
                    särskildÅtgärd);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// En metod som hämtar ut en räkning beroende på det personnummret som anges.
        /// </summary>
        /// <param name="Searchvalue"></param>
        /// <returns></returns>
        public System.Data.DataSet GetDataByPersonNrTandRäkning(string @Searchvalue)
        {
            dataSetValue.Tables.Add(räkningTable.GetDataByPersonNrTandRäkning(@Searchvalue));
            return dataSetValue;
        }


        #endregion

    }
}
